package online.abor;

/**
 * 兔子问题
 * 题目：古典问题：有一对兔子，从出生后第3个月起每个月都生一对兔子，小兔子长到第三个月后每个月又生一对兔子，假如兔子都不死，问每个月的兔子对数为多少？
 * 程序分析： 兔子的规律为数列1,1,2,3,5,8,13,21....
 */
public class Topic01_Rabbit {
    /**
     * 获取指定对数兔子指定月份数之后的总对数
     * @param baseRabbitCount 兔子的基数（多少对）
     * @param month           月份数
     * @return 截止时间的时候兔子对数
     */
    public static int topic01_rabbit(int baseRabbitCount, int month) {
        int currentCount = 0;
        currentCount = baseRabbitCount * topic01_rabbit_aRabbit(month);
        return currentCount;
    }

    /**
     * 获取1对兔子指定月份数之后的总对数
     * @param month 月份数
     * @return 截止时间的时候兔子对数
     */
    public static int topic01_rabbit_aRabbit(int month) {
        int count = 1;
        for (int i = 1; i <= month; i++) {
            // 第三个月才开始下兔子
            if (i >= 3) {
                // 下的那只兔子继续下
                count += topic01_rabbit_aRabbit(month - i + 1);
            }
        }
        return count;
    }
}
